package controller;

import HibernateConfig.HibernateUtil;
import grupod.dp1.MainApplication;
import java.util.List;
import model.Ciudad;
import model.Usuario;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import util.EnviarCorreo;

public class UsuarioController {

    private final SessionFactory sf = MainApplication.getSesion();

    public Usuario iniciarSesion(String usuario, String password) {
        Session sesion = this.sf.openSession();

        Usuario usuarioEnc = null;

        String hql = "FROM Usuario c  WHERE usuario = '" + usuario + "' AND password ='" + password + "'";

        List lsUsuario = sesion.createQuery(hql).list();
        sf.close();

        if (lsUsuario.size() > 0) {
            usuarioEnc = (Usuario) lsUsuario.get(0);
        }

        sesion.close();
        return usuarioEnc;
    }

    public int agregarUsuario(Usuario usuario) {
        try {
            Session sesion = this.sf.openSession();

            sesion.beginTransaction();

            sesion.save(usuario);

            sesion.getTransaction().commit();
            sesion.close();

            EnviarCorreo correo = new EnviarCorreo();
            correo.enviarCorreoNuevo(usuario);

            return 1;
        } catch (HibernateException he) {
            return 0;
        }
    }

    public Usuario buscaUsuarioxNombUsuario(String nombUsuario) {
        Session sf = HibernateUtil.getSessionFactory().openSession();
        Transaction transaccion = sf.beginTransaction();
        Usuario usuEnc = null;

        String hql = "FROM Usuario c  WHERE usuario = '" + nombUsuario + "'";

        List lsUsuario = sf.createQuery(hql).list();
        sf.close();

        if (lsUsuario.size() > 0) {
            usuEnc = (Usuario) lsUsuario.get(0);
        }

        return usuEnc;
    }

    public int cambiarContrasenhaOlvido(Usuario usuario) {
        Session sesion = this.sf.openSession();
        int resultado;
        try {
            sesion.beginTransaction();
            sesion.update(usuario);
            sesion.getTransaction().commit();
            resultado = 1;
        } catch (HibernateException he) {
            resultado = 0;
        }
        sesion.close();
        return resultado;
    }

    public int cambiarContrasenha(Usuario usuario, String passNueva) {
        Session sesion = this.sf.openSession();
        int resultado = 0;
        try {

            sesion.beginTransaction();
            usuario.setPassword(passNueva);
            sesion.update(usuario);
            sesion.getTransaction().commit();

            resultado = 1;

        } catch (HibernateException he) {
            resultado = 0;
        }
        sesion.close();
        return resultado;
    }

    public int buscarUsuarioxDNI(String dni) {
        Session sf = HibernateUtil.getSessionFactory().openSession();
        Transaction transaccion = sf.beginTransaction();
        int res = 0;

        String hql = "FROM Usuario c  WHERE dni = '" + dni + "'";

        List lsUsuario = sf.createQuery(hql).list();
        sf.close();

        if (lsUsuario.size() > 0) {
            res = 1;
        }

        return res;
    }
}
